package com.bee.剑指offer;

import java.util.*;

/**
 * 在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1（需要区分大小写）.（从0开始计数）
 * 输入："google"
 * 返回值：4
 */
public class 第一个只出现一次的字符 {

    public static int FirstNotRepeatingChar(String str) {
        if(str.length() == 0) {
            return -1;
        }
        Map<String,Integer> map = new LinkedHashMap<>();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < str.length(); i++) {
            if(map.containsKey(str.charAt(i) + "")){
                map.remove(str.charAt(i) + "");
                list.remove(str.charAt(i) + "");
                continue;
            }
            map.put(str.charAt(i) + "",i);
            list.add(str.charAt(i) + "");
        }
        if(map.isEmpty() || list.isEmpty()) {
            return -1;
        }
        return map.get(list.get(0));
    }

    public static int findFirst(String str) {
        if(str.length() == 0) {
            return -1;
        }
        Map<String,Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < str.length(); i++) {
            if(map.containsKey(str.charAt(i) + "")) {
                map.put(str.charAt(i) + "",map.get(str.charAt(i) + "") + 1);
            } else {
                map.put(str.charAt(i) + "",1);
            }
        }
        for (int i = 0; i < str.length(); i++) {
            if(map.containsKey(str.charAt(i) + "") && map.get(str.charAt(i) + "") == 1) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(findFirst("gooogle"));
    }
}
